﻿using IOP.SgrA.GLSL;
using IOP.SgrA.SilkNet.Vulkan.Scripted;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace VkSample121
{
    [ShaderVersion("460")]
    [GLSLExtension("GL_ARB_separate_shader_objects : enable")]
    [GLSLExtension("GL_ARB_shading_language_420pack : enable")]
    public partial class TexLightFrag : GLSLFrag
    {
        [ShaderInput(0)]
        public vec4 inLightQD {  get; set; }
        [ShaderInput(1)]
        public vec2 mcLongLat {  get; set; }
        [FragOutput(0, false)]
        public vec4 OutColor { get; set; }

        public override void main()
        {
            vec3 bColor = new vec3(0.678f, 0.231f, 0.129f); //砖块的颜色
            vec3 mColor = new vec3(0.763f, 0.657f, 0.614f); //水泥的颜色
            vec3 color; //片元的最终颜色
            float row = trunc(mod((mcLongLat.y + 90.0f) / 12.0f, 2.0f)); //计算当前片元位于奇数行还是偶数行
            float ny = mod(mcLongLat.y + 90.0f, 12.0f); //计算当前片元是否在此行区域1 中的辅助变量
            float oeoffset = 0.0f; //每行的砖块偏移值(奇数行偏移半个砖块)
            float nx; //计算当前片元是否在此行区域3 中的辅助变量
            if (ny > 10.0) { color = mColor; } //若位于此行的区域1 中，采用水泥色着色
            else
            { //若不位于此行的区域1 中
                if (row == 1) { oeoffset = 11.0f; } //若为奇数行则偏移半个砖块
                nx = mod(mcLongLat.x + oeoffset, 22.0f); //计算当前片元是否在此行区域3 中的辅助变量
                if (nx > 20.0) { color = mColor; } //若不位于此行的区域3 中，采用水泥色着色
                else { color = bColor; } //若位于此行的区域3 中，采用砖块色着色
            }
            OutColor = new vec4(color, 0) * inLightQD; //将片元的最终颜色传递进渲染管线
        }
    }
}
